package com.sky.command;

import lombok.Data;

import java.util.ArrayList;
import java.util.List;

@Data
public class MessageCommand {
    private String model;
    private List<MessageContent> messages;
    private Thinking thinking = new Thinking();
    @Data
    public static class Thinking{
        private String type = "disabled";
    }
    @Data
    public static class MessageContent {
        private List<ContentItem> content;
        private String role;
    }

    @Data
    public static class ContentItem {
        private String text;
        private String type;
        private ImageUrl image_url; // 仅当type为"image_url"时存在
    }
    @Data
    public static class ImageUrl {
        private String url;
    }
    public MessageCommand(String url, String model) {
        this.model = model;
        // 1. 初始化图片URL对象
        ImageUrl imageUrl = new ImageUrl();
        imageUrl.setUrl(url);
        // 2. 创建图片类型的内容项
        ContentItem imageContent = new ContentItem();
        imageContent.setType("image_url");
        imageContent.setImage_url(imageUrl);

        // 3. 创建文本类型的内容项（题目要求文本）
        ContentItem textContent = new ContentItem();
        textContent.setType("text");
        textContent.setText("请识别图片中的题目坐标并返回，需满足以下要求：" +
                "\n1. 框选范围需完整覆盖单道题目，包含全部题目文本、选项（选择题）、公式、图表等关键元素（" +
                "如\"平方米\"\"XYZ\"等细节不可截断）；\n2. 若图片包含多道题目，仅选取最完整的一道（优先选择无歪斜、无重叠、文字清晰的题目）；" +
                "\n3. 支持处理大尺寸图片、复杂排版（如多题混合、表格数据）及非文字元素（如公式符号、英文单词、图表坐标轴）；" +
                "\n4. 框选需避免冗余内容（如无关笔记、其他题目），但允许轻微边缘误差（不影响题目完整性即可）。" +
                "\n\n返回格式：<bbox>x1 y1 x2 y2</bbox>");
        // 4. 组合内容项列表
        List<ContentItem> contentList = new ArrayList<>();
        contentList.add(textContent);
        contentList.add(imageContent);
        // 5. 创建消息内容对象
        MessageContent messageContent = new MessageContent();
        messageContent.setContent(contentList);
        messageContent.setRole("user");
        // 6. 初始化消息列表
        this.messages = new ArrayList<>();
        this.messages.add(messageContent);
    }
}
